package com.spring.forum.utils;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class SecurityUtils {

    /**
     * 加密
     *
     * @param password 用户注册时输入的密码
     * @return 数据库中存储的密码信息: 盐值 + md5(明文+盐值)
     */
    public static String encrypt(String password) {
        // 生成随机盐值
        String salt = UUID.randomUUID().toString().replaceAll("-", "");
        // 对 明文+盐值 进行MD5 加密
        String ciphertext = DigestUtils.md5DigestAsHex((password + salt).getBytes());
        return salt + ciphertext;
    }

    /**
     * 验证用户密码是否正确
     *
     * @param inputPassword 用户登录时输入的密码
     * @param sqlPassword    数据库中用户存储的密码(进行了加密的密码)
     * @return
     */
    public static boolean verify(String inputPassword, String sqlPassword) {
        // 对所输入的密码进行校验
        if (!StringUtils.hasLength(inputPassword)) {
            return false;
        }
        // 因为数据库中存储的是盐值 + md5(明文+盐值)
        // 要盐值，首先要把前面的盐值取出来(盐值为32位)
        String salt = sqlPassword.substring(0,32);
        String ciphertext = DigestUtils.md5DigestAsHex((inputPassword + salt).getBytes());
        return (salt + ciphertext).equals(sqlPassword);
    }

    public static void main(String[] args) {
        System.out.println(encrypt("1234567"));
        System.out.println(verify("123456","881300b98bd546eebd356d37c2d7ad6f43c033a2f32526e2187953b608ea4847"));
    }
}
